import Pubsub from "pubsub-js"
import request from '../../utils/request'
import moment from 'moment'
const appInstance = getApp();
// pages/SongDetail/SongDetail.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isPlay:false,
    songList:[],
    musicId:'',
    musicLink:'',
    currentTime:'00:00',//实时时间
    durationTime:'00:00',//总时长
    currentWidth:0//长度
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 订阅来自recommendsong页面发布的消息
  Pubsub.subscribe('musicId',(_,musicID)=>{
    // console.log(musicID);
    this.getSongList(musicID)
    // 自动播放
    this.musicControl(true,musicID)
    
  })
    let musicId = options.musicId
    this.getSongList(musicId)
    // 判断当前页面是否在播放
    if(appInstance.globalData.isMusicPlay && appInstance.globalData.musicId === musicId){
      this.changIsPlayState(true)
    }
    // 创建实例
    this.BackgroundAudioManager = wx.getBackgroundAudioManager();
    // 监听播放
    this.BackgroundAudioManager.onPlay(()=>{
    // console.log('onPlay');
    this.changIsPlayState(true)
    // 修改全局音乐播放状态
    appInstance.globalData.musicId = musicId;
    });
    // 监听暂停
    this.BackgroundAudioManager.onPause(()=>{
    // console.log('onPause');
    this.changIsPlayState(false)
    });
    // 监听停止
    this.BackgroundAudioManager.onStop(()=>{
      // console.log('onPause');
      this.changIsPlayState(false)
      });
    // 监听音乐实时播放进度
     this.BackgroundAudioManager.onTimeUpdate(()=>{
      //  console.log('总时长',this.BackgroundAudioManager.duration);
      //  console.log('实时时间',this.BackgroundAudioManager.currentTime);
      let currentWidth = (this.BackgroundAudioManager.currentTime / this.BackgroundAudioManager.duration ) * 488
      this.setData({
        currentWidth
      })
      //  格式化时间
      let currentTime = moment(this.BackgroundAudioManager.currentTime * 1000).format('mm:ss')
      // console.log(currentTime);
      this.setData({
        currentTime
      })
    })
    // 监听播放结束
    this.BackgroundAudioManager.onEnded(()=>{
      // console.log('onEnded');
      Pubsub.publish('switchType','next')
      this.setData({
        currentWidth:0,
        currentTime:'00:00'
      })
      
      });
      },
    
  // 封装更新isplay
  changIsPlayState(isPlay){
    this.setData({
      isPlay
    })
    appInstance.globalData.isMusicPlay = isPlay;
  },
  // 获取歌曲详情
  async getSongList(id){
    let res = await request('/song/detail',{ids:id})
    // console.log(res);
    // 时间转换
    let durationTime = moment(res.songs[0].dt).format('mm:ss')
    
    this.setData({
      songList:res.songs,
      musicId:res.songs[0].id,
      durationTime
    })
  
    wx.setNavigationBarTitle({
      title: res.songs[0].name
    })
  },
// 控制播放
musicPlay(){
  let isPlay = !this.data.isPlay
  let {musicId,musicLink} = this.data
  this.musicControl(isPlay,musicId,musicLink)
},

// 控制音乐播放暂停功能函数
async musicControl(isPlay,musicId,musicLink){
  if(isPlay){
  // 播放音乐
   // 获取音乐播放链接
   if(!musicLink){
    let musicLinkData = await request('/song/url',{id:musicId})
    musicLink = musicLinkData.data[0].url;
    this.setData({
      musicLink
    })
   }
   
  //  console.log(musicLinkData);
    // 创建播放音乐的实例
    this.BackgroundAudioManager.src = musicLink;
    this.BackgroundAudioManager.title = this.data.songList[0].name
  
  }else{
    this.BackgroundAudioManager.pause()
  }
},

// 切歌
handleSwitch(event) {
  // console.log(123);
  // 获取切换类型
  let type = event.currentTarget.id
  // 点击切换关闭当前的音乐
  this.BackgroundAudioManager.stop()
  
 
  // console.log(type);
  // 发布切换类型给recommendSong页面
  Pubsub.publish('switchType',type)
},
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    Pubsub.unsubscribe('musicId')
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})